package chapter11;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * JRadionButton
 * JRadioButton组件被称为单选按钮组件，单选按钮只能选中一个
 *
 * 当一个按钮被选中时，先前被选中的按钮就需要自动取消选中，但是JRadioButton组件本身并不具备这种功能，
 * 若想实现JRadioButton按钮之间的互斥，需要使用javax.swing.ButtonGroup类。
 *
 * 将多个JRadioButton按钮添加到同一个单选按钮组中就能实现JRadioButton按钮的单选功能
 */
public class Example15 {
    private static void createAndShowGUI() {
        // 1、创建一个JFrame容器窗口
        JFrame f = new JFrame("JFrame窗口");
        f.setLayout(new BorderLayout());
        f.setSize(300, 300);
        f.setLocation(300, 200);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 2、创建一个JLabel标签组件，标签文本居中对齐
        JLabel label = new JLabel("Hello World!", JLabel.CENTER);
        label.setFont(new Font("宋体", Font.PLAIN, 20));
        // 3、创建一个页尾的JPanel面板组件，来封装ButtonGroup组件
        JPanel panel = new JPanel();
        // 3.1、创建一个ButtonGroup按钮组件
        ButtonGroup group = new ButtonGroup();
        // 3.2、创建二个JRadioButton单选按钮组件
        JRadioButton italic = new JRadioButton("ITALIC");
        JRadioButton bold = new JRadioButton("BOLD");
        // 3.3、将二个JRadioButton单选按钮组件加入到同一个ButtonGroup组中
        group.add(italic);
        group.add(bold);
        // 3.4、为二个JRadioButton单选按钮组件注册动作监听器
        ActionListener listener = new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                int mode = 0;
                if (bold.isSelected())
                    mode += Font.BOLD;
                if (italic.isSelected())
                    mode += Font.ITALIC;
                label.setFont(new Font("宋体", mode, 20));
            }
        };
        // 3.5、为二个单选框添加监听器
        italic.addActionListener(listener);
        bold.addActionListener(listener);
        // 3.6、将二个JRadioButton单选按钮组件加入到页尾的JPanel组件中
        panel.add(italic);
        panel.add(bold);
        // 4、向JFrame容器中分别加入居中的JLabel标签组件和页尾的JPanel面板组件
        f.add(label);
        f.add(panel, BorderLayout.PAGE_END);
    }

    public static void main(String[] args) {
        // 使用SwingUtilities工具类调用createAndShowGUI()方法显示GUI程序
        SwingUtilities.invokeLater(Example15::createAndShowGUI);
    }
}
